SQL-এ Joins এবং Nested Queries (বা Subqueries) অত্যন্ত শক্তিশালী এবং গুরুত্বপূর্ণ টুলস, যেগুলি বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন এবং জটিল প্রশ্নের উত্তর খুঁজে বের করতে সাহায্য করে। Advanced Joins এবং Nested Queries ব্যবহারের মাধ্যমে আপনি আরও জটিল ডেটা বিশ্লেষণ করতে পারবেন।
SQL Joins ব্যবহার করে একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয় এবং বিভিন্ন টেবিলের ডেটা একত্রে দেখা যায়। Advanced Joins হল সাধারণ Joins এর আরও উন্নত রূপ, যেখানে জটিল সম্পর্ক স্থাপন, ডেটা ফিল্টারিং এবং আরও উন্নত কাজ করা হয়।
INNER JOIN দুটি টেবিলের মধ্যে মিল থাকা রেকর্ডগুলিকে একত্রিত করে। যেসব রেকর্ড দুটি টেবিলের মধ্যে মিলিত হয়, শুধু সেগুলিই ফলাফলে আসে।
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
এখানে employees
এবং departments
টেবিলের মধ্যে department_id
এবং id
কলামের মধ্যে মিলিত রেকর্ড গুলি প্রদর্শিত হবে।
LEFT JOIN মূল টেবিলের সমস্ত রেকর্ড নিয়ে আসে এবং সম্পর্কিত রেকর্ড পাওয়া না গেলে NULL দেখায়।
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
এখানে employees টেবিলের সমস্ত রেকর্ড দেখানো হবে, এবং departments টেবিলের সাথে সম্পর্কিত ডেটা থাকলে তা প্রদর্শিত হবে, না থাকলে NULL
দেখাবে।
RIGHT JOIN হল LEFT JOIN এর বিপরীত, যেখানে মূল টেবিলের ডেটা থেকে রেকর্ডগুলির পাশাপাশি সম্পর্কিত রেকর্ড পাওয়া না গেলে NULL দেখায়।
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
এখানে departments টেবিলের সমস্ত রেকর্ড দেখানো হবে এবং সম্পর্কিত employees টেবিলের ডেটা থাকলে তা প্রদর্শিত হবে।
FULL JOIN দুটি টেবিলের সমস্ত রেকর্ড তুলে আনে, এবং যেখানে সম্পর্কিত ডেটা থাকে, সেখানে ডেটা দেখায়। যেসব রেকর্ডে মিল নেই, সেখানে NULL দেখায়।
SELECT employees.name, departments.name
FROM employees
FULL JOIN departments
ON employees.department_id = departments.id;
এখানে employees এবং departments টেবিলের সমস্ত রেকর্ড আনা হবে, যেখানে মিল থাকলে ডেটা দেখাবে এবং না থাকলে NULL দেখাবে।
CROSS JOIN দুটি টেবিলের মধ্যে সমস্ত সম্ভব মিল তৈরি করে, অর্থাৎ একটি টেবিলের প্রতিটি রেকর্ডের সাথে অন্য টেবিলের সমস্ত রেকর্ড জোড়া তৈরি করে। এটি একে অপরের সাথে Cartesian Product তৈরি করে।
SELECT employees.name, departments.name
FROM employees
CROSS JOIN departments;
এখানে, employees এবং departments টেবিলের সমস্ত রেকর্ডের মিল তৈরি হবে।
SELF JOIN একটি টেবিলকে নিজের সাথে যোগ করার প্রক্রিয়া, যা JOIN এর মতো কাজ করে, তবে একই টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয়।
SELECT e1.name AS Employee, e2.name AS Manager
FROM employees e1
INNER JOIN employees e2
ON e1.manager_id = e2.id;
এখানে employees টেবিলের মধ্যে কর্মী এবং তাদের ম্যানেজারের সম্পর্ক স্থাপন করা হচ্ছে।
Nested Queries বা Subqueries হল SQL কোয়েরির মধ্যে কোয়েরি, যা একটি মূল কোয়েরির মধ্যে অন্তর্ভুক্ত থাকে এবং ডেটার উপর আরও নির্দিষ্ট প্রশ্ন করতে সাহায্য করে। Subquery মূল কোয়েরির শর্ত হিসেবে ব্যবহৃত হয় এবং এটি সাধারণত WHERE, FROM, SELECT, বা HAVING ক্লজের মধ্যে থাকতে পারে।
WHERE ক্লজে Subquery ব্যবহার করা হয় যখন মূল কোয়েরি কোনো শর্ত পূর্ণ করার জন্য একটি অস্থায়ী কোয়েরির ফলাফল চায়।
SELECT name, salary
FROM employees
WHERE department_id = (SELECT id FROM departments WHERE name = 'HR');
এখানে, প্রথম কোয়েরি employees টেবিল থেকে সমস্ত কর্মীকে নির্বাচিত করবে যাদের department_id একটি সাবকোয়েরি দ্বারা পাওয়া HR বিভাগের id এর সমান।
SELECT ক্লজে Subquery ব্যবহার করা হয় যখন আপনি মূল কোয়েরির ফলাফলের সাথে কোনো অতিরিক্ত গণনা বা ডেটা যুক্ত করতে চান।
SELECT name,
(SELECT MAX(salary) FROM employees WHERE department_id = 1) AS MaxSalary
FROM employees;
এখানে, প্রতিটি কর্মী এবং তাদের department_id = 1 এর জন্য MAX(salary) দেখানো হবে।
FROM ক্লজে Subquery ব্যবহার করা হয় যখন মূল কোয়েরি একটি টেবিলের মতো একটি সাবকোয়েরির ফলাফল ব্যবহার করতে চায়।
SELECT department_id, AVG(salary)
FROM (SELECT department_id, salary FROM employees WHERE salary > 50000) AS high_salary
GROUP BY department_id;
এখানে, প্রথমে একটি সাবকোয়েরি দ্বারা salary > 50000 কর্মীদের বের করা হবে এবং তারপর তাদের গড় বেতন গোনা হবে।
Correlated Subquery হল এমন একটি সাবকোয়েরি যা মূল কোয়েরির প্রতিটি রেকর্ডের জন্য আলাদাভাবে চালিত হয়। সাবকোয়েরি মূল কোয়েরির রেকর্ডের সাথে সম্পর্কিত।
SELECT e1.name, e1.salary
FROM employees e1
WHERE e1.salary > (SELECT AVG(e2.salary) FROM employees e2 WHERE e1.department_id = e2.department_id);
এখানে, প্রতিটি কর্মীর বেতন তার বিভাগের গড় বেতনের থেকে বেশি কিনা তা যাচাই করা হচ্ছে।
EXISTS সাবকোয়েরি ব্যবহার করা হয় যখন আপনি চেক করতে চান যে কোনও রেকর্ড রয়েছে কি না।
SELECT name
FROM employees
WHERE EXISTS (SELECT 1 FROM departments WHERE employees.department_id = departments.id);
এখানে, employees টেবিলের সকল কর্মী নির্বাচন করা হবে যাদের department_id departments টেবিলে রয়েছে।
এই টুলগুলো ব্যবহারে আপনি আরও জটিল প্রশ্ন এবং ডেটা বিশ্লেষণ করতে পারবেন, যা SQL কোডে দক্ষতা বৃদ্ধি করবে।
Read more